package LetCode;

import java.util.Arrays;

/**
 * @author: lwt
 * @date: 2025/7/23 19:50
 * @description:
 */
public class day3 {
    public static void main(String[] args) {

        /**
         *删除数组中的重复项
         * */
        int[] nums = {0,0,1,1,1,1,2,3,3};
//        int[] nums = {1,1,1,2,2,3};
//        int[] nums = {1,1,2};
        int k = removeDuplicates(nums);
        System.out.println(k);
        System.out.println(Arrays.toString(nums));
    }

    public static int removeDuplicates(int[] nums) {

        /**
         * 删除数组中的重复项
         * */
//        int result = 0;
//        for (int i = 0; i < nums.length; i++) {
//            if (i + 1 > nums.length - 1) {
//                break;
//            }
//                for (int j = i; j < nums.length; j++) {
//                    if (nums[j] > nums[i]) {
//                        nums[i + 1] = nums[j];
//                        result += 1;
//                        break;
//                    }
//                }
//                if (nums[i] < nums[i + 1]) {
//                    continue;
//                } else {
//                    break;
//                }
//            }
//            return result + 1;


        /**
         * 快慢指针
         * */
//        int n = nums.length;
//        if (n == 0) return 0; //空数组
//        int fast = 1;  //快指针遍历数组
//        int slow = 1;  //慢指针到指定位置赋值
//        while (fast < n) {
//            if (nums[fast] >nums[fast-1]){
//                nums[slow] = nums[fast];
//                slow++;
//            }
//            fast++;
//        }
//        return slow;

//        int slow = 2;
//        int fast = slow+1;
//        int n = nums.length-1;
//        while(fast<n){
//            if (nums[fast] == nums[slow]){
//                for (int k = fast;k<nums.length;k++){ //遍历fast之后的值
//                    if (nums[k]>nums[fast]){  //找出大于nums[fast]的值
//                        //交换两个位置处的值
//                        int temp = nums[fast+1];
//                        nums[fast+1] = nums[k];
//                        nums[k] = temp;
//                        slow+=1;
//                        break;
//                    }
//                }
//            }else if (nums[fast]>nums[slow]){  //只出现一次并且快指针处的值大于等于慢指针处的值
//                    slow++;
//            }else  {  //fast处的值比slow处的值小
//                for (int j = fast;j<nums.length;j++){
//                    if (nums[j]>=nums[slow]){
//                        int temp = nums[slow+1];
//                        nums[slow+1] = nums[j];
//                        nums[j] = temp;
//                        slow+=1;
//                        break;
//                    }
//                }
//            }
//            fast = slow+1;
//        }
//        return slow+1;

        int n = nums.length;
        if (n<=2) return n;
        int slow = 2;
        int fast = 2;
        while (fast < n) {
            if (nums[slow-2] != nums[fast]){
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
}
